
https://leetcode.cn/problems/greatest-sum-divisible-by-three/description/

//class Solution {
//public:
//    int maxSumDivThree(vector<int>& nums) {
//        const int INT = 0x3f3f3f3f;
//
//        int x1 = INT, x2 = INT, y1 = INT, y2 = INT;
//        int sum = 0;
//        for (auto& x : nums)
//        {
//            sum += x;
//            if (x % 3 == 1)
//            {
//                if (x < x1) {
//                    x2 = x1;
//                    x1 = x;
//                }
//                else if (x < x2) {
//                    x2 = x;
//                }
//            }
//            else if (x % 3 == 2)
//            {
//                if (x < y1) {
//                    y2 = y1;
//                    y1 = x;
//                }
//                else if (x < y2) {
//                    y2 = x;
//                }
//            }
//        }
//        if (sum % 3 == 0) return sum;
//        else if (sum % 3 == 1) return max(sum - x1, sum - y1 - y2);
//        return max(sum - y1, sum - x1 - x2);
//
//    }
//};

https://leetcode.cn/problems/russian-doll-envelopes/description/
//class Solution {
//public:
//    int maxEnvelopes(vector<vector<int>>& envelopes)
//    {
//        sort(envelopes.begin(), envelopes.end(), [&](const vector<int>& x1, const vector<int>& x2) {
//            return x1[0] != x2[0] ? x1[0]<x2[0] : x1[1]>x2[1];
//            });
//
//        vector<int> ret;
//        ret.push_back(envelopes[0][1]);
//        for (int i = 1; i < envelopes.size(); i++)
//        {
//            int b = envelopes[i][1];
//            if (b > ret.back()) {
//                ret.push_back(b);
//            }
//            else {
//                int left = 0, right = ret.size() - 1;
//                while (left < right)
//                {
//                    int mid = (left + right) >> 1;
//                    if (ret[mid] >= b) right = mid;
//                    else left = mid + 1;
//                }
//                ret[left] = b;
//            }
//        }
//        return ret.size();
//    }
//};